/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.impl;

import dao.ds.AccesoDB;
import java.sql.CallableStatement;
import dao.to.AlumnoTO;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import dao.design.IAlumnoDAO;

/**
 *
 * @author Haybert
 */
public class AlumnoDAO implements IAlumnoDAO{
    private AccesoDB db;

    public AlumnoDAO() {
        db = new AccesoDB();
    }
    @Override
    public List<AlumnoTO> query(){
        List<AlumnoTO> lista = new ArrayList<AlumnoTO>();
        try {
            Connection cn = db.getConexion();
            CallableStatement cs = cn.prepareCall("{call sp_query()}");
            ResultSet rs = cs.executeQuery();
            while (rs.next()){
                AlumnoTO alu = new AlumnoTO();
                alu.setIdalumno(rs.getInt(1));
                alu.setNombres(rs.getString(2));
                alu.setNota1(rs.getShort(3));
                alu.setNota2(rs.getShort(4));
                alu.setNota3(rs.getShort(5));
                alu.setComentario(rs.getString(6));
                lista.add(alu);
            }
            cn.close();
        } catch (SQLException e) {
        }
        return lista;
    }

    @Override
    public String insert(AlumnoTO alumno) {
        String resultado= null;
        try {
            Connection cn = db.getConexion();
            CallableStatement  cs = cn.prepareCall("{call sp_insert(?,?,?,?,?)}");
            cs.setString(1, alumno.getNombres());
            cs.setShort(2, alumno.getNota1());
            cs.setShort(3, alumno.getNota2());
            cs.setShort(4, alumno.getNota3());
            cs.setString(5, alumno.getComentario());
            int ctos = cs.executeUpdate();
            if(ctos==0){
                resultado =" 0 filas afectadas";
            }
        } catch (SQLException e) {
            resultado = e.getMessage();
        }
        return resultado;
                
    }

    @Override
    public String delete(Integer idalumno) {
        String resultado = null;
        try {
            Connection cn = db.getConexion();
            CallableStatement cs = cn.prepareCall("{call sp_delete(?)}");
            cs.setInt(1, idalumno);
            int ctos = cs.executeUpdate();
            if (ctos==0){
                resultado ="0 filas afectadas";
            }
        } catch (SQLException e) {
            resultado = e.getMessage();
        }
        return resultado;
        
    }

    @Override
    public String update(AlumnoTO alumno) {
        String resultado = null;
        try {
            Connection cn = db.getConexion();
            CallableStatement cs = cn.prepareCall("{call sp_update(?,?,?,?,?,?)}");
            cs.setInt(1, alumno.getIdalumno());
            cs.setString(2, alumno.getNombres());
            cs.setShort(3, alumno.getNota1());
            cs.setShort(4, alumno.getNota2());
            cs.setShort(5, alumno.getNota3());
            cs.setString(6, alumno.getComentario());
            int ctos = cs.executeUpdate();
            if (ctos==0){
                resultado ="0 filas afectadas";
            }
        } catch (SQLException e) {
            resultado = e.getMessage();
        }
        return resultado;
    }

    @Override
    public AlumnoTO get(Integer idalumno) {
        AlumnoTO alu  = new AlumnoTO();
        try {
            Connection cn = db.getConexion();
            CallableStatement cs = cn.prepareCall("{call sp_get(?)}");
            cs.setInt(1, idalumno);
            ResultSet rs = cs.executeQuery();
            if(rs.next()){
                alu.setIdalumno(rs.getInt(1));
                alu.setNombres(rs.getString(2));
                alu.setNota1(rs.getShort(3));
                alu.setNota2(rs.getShort(4));
                alu.setNota3(rs.getShort(5));
                alu.setComentario(rs.getString(6));
            }
            cn.close();
        } catch (SQLException e) {
        }
        return alu;
    }

    @Override
    public String promedio(Integer idalumno) {
        String resultado = null;
        try {
            Connection cn = db.getConexion();
            CallableStatement cs = cn.prepareCall("{call sp_promedio(?,?,?)}");
            cs.setInt(1, idalumno);
            cs.registerOutParameter(2, java.sql.Types.VARCHAR);
            cs.registerOutParameter(3, java.sql.Types.DOUBLE);
            cs.execute();
            
            String nom = cs.getString(2);
            double pro = cs.getDouble(3);
            
            resultado = nom + " tiene promedio: "+pro;
            cn.close();
            
        } catch (SQLException e) {
            resultado = e.getMessage();
        }
        return resultado;
    }
    
}
